package com.nowcoder.community.aspect;


import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.*;
import org.springframework.stereotype.Component;

/**
 * Aop学习
 */
//@Component
//@Aspect
public class AlphaAspect {
    //返回值 所有业务组件的所有方法的所有参数
    @Pointcut("execution(* com.nowcoder.community.service.*.*(..))")
    public void pointcut(){

    }

    // 后处理
    @Before("pointcut()")
    public void before(){
        System.out.println("before");
    }

    // 前处理
    @After("pointcut()")
    public void after(){
        System.out.println("after");
    }

    // 返回后处理
    @AfterReturning("pointcut()")
    public void afterReturning(){
        System.out.println("afterReturning");
    }

    // 报错后处理
    @AfterThrowing("pointcut()")
    public void afterThrowing(){
        System.out.println("afterThrowing");
    }

    // 环绕处理
    @Around("pointcut()")
    public Object around(ProceedingJoinPoint joinPoint) throws Throwable{

        System.out.println("around before");
        // 调用被处理的目标组件的方法。joinPoint目标对象织入代码的位置
        Object obj = joinPoint.proceed();
        System.out.println("around after");
        return obj;
    }



}
